<?php

class UsuarioController extends Zend_Controller_Action {

    private $_participantes;

    public function init() {
        /* Initialize action controller here */
        $this->_participantes = new Application_Model_GerenciadorParticipantesBolao();
    }

    public function indexAction() {
        $this->_helper->redirector('log-on');
    }

    /**
     * Pagina que vai no e-mail de confirmacao
     *
     *
     *
     *
     *
     */
    public function confirmarAction() {
        //Pega o parametro token, da URL
        $token = $this->getRequest()->getParam('token');
        $sucesso = Application_Model_Usuario::confirmarCadastro($token);

        $this->view->sucesso = $sucesso;
    }

    private function getAuthAdapter(array $params) {
        $dbAdapter = Zend_Db_Table_Abstract::getDefaultAdapter();
        $authAdapter = new Zend_Auth_Adapter_DbTable(
                $dbAdapter,
                'usuario',
                'email',
                'senha_salgada',
                'MD5(CONCAT(?, sal)) AND ativo = TRUE'
        );

        $authAdapter
                ->setIdentity($params['email'])
                ->setCredential($params['senha']);

        return $authAdapter;
    }

    public function logOnAction() {
        $request = $this->getRequest();
        $formLogOn = new Application_Form_LogOn();

        if ($this->getRequest()->isPost() && $formLogOn->isValid($request->getPost())) {
            $valores = $formLogOn->getValues();

            $adapter = $this->getAuthAdapter($valores);
            $auth    = Zend_Auth::getInstance();
            $result  = $auth->authenticate($adapter);

            if (!$result->isValid()) {
                $formLogOn->setDescription("Endereço de email ou senha incorretos, tente novamente");
                $this->view->form = $formLogOn;
                //return $this->render('log-on'); // re-render the login form
                return;
            }

            $this->view->email = $result->getIdentity();
            $this->view->logado = true;
            $this->view->bolito = $this->pegaBolitos();

            $this->_helper->getHelper('logOn')->loginEfetuado();

            $this->view->form = $formLogOn;
            return $this->render('log-on'); // re-render the login form

        }
        else {
            if (Zend_Auth::getInstance()->hasIdentity()) {
                $this->view->logado = true;
                $this->view->bolito = $this->pegaBolitos();
                $identity = Zend_Auth::getInstance()->getIdentity();
                $this->view->email = $identity;
            }
            else {
                $this->view->form = $formLogOn;
            }
        }
    }

    public function logOutAction() {
        $request = $this->getRequest();
        $formLogOn = new Application_Form_LogOn();

        if (Zend_Auth::getInstance()->hasIdentity()) {
            Zend_Auth::getInstance()->clearIdentity();
        }

        $this->_helper->redirector('log-on');
    }

    public function novoAction() {
        $request = $this->getRequest();
        $form    = new Application_Form_Cadastro();

        //se estamos recebendo dados AND os recebidos dados sao validos
        if ($this->getRequest()->isPost() && $form->isValid($request->getPost())) {
            $valores = $form->getValues();
            $this->view->parabens = true;
            $dados = NULL;
            try {
                $dados = Application_Model_Usuario::requisitarCadastro($valores['nome'], $valores['email']);
            } catch (Exception $ex) {
                $this->view->chore = true;
                $this->view->parabens = false;
            }


            $this->view->dados = $dados;

            //return $this->_helper->redirector('..');
        }
        else {
            $this->view->form = $form;
        }
    }

    public function pegaBolitos() {
        $participantes = new Application_Model_GerenciadorParticipantesBolao();
        $pendentes = null;

        if (Zend_Auth::getInstance()->hasIdentity()) {
            $email = Zend_Auth::getInstance()->getIdentity();
            return $participantes->bolitos($email);
        }
    }

    public function alterarDadosAction() {
        $request = $this->getRequest();
        $form    = new Application_Form_AlteraCadastro();

        $email = $this->_helper->logOn(true)->getEmail();

        $usuarioMapper = new Application_Model_UsuarioMapper();
        $usuario = new Application_Model_Usuario(NULL, NULL, NULL, NULL, NULL, NULL, NULL);
        $usuarioMapper->find($email, $usuario);
        $senhaSalgada = $usuario->getSenhaSalgada();
        $sal = $usuario->getSal();

        $form->setNome($usuario->getNome());

        //se estamos recebendo dados AND os recebidos dados sao validos
        if ($this->getRequest()->isPost() && $form->isValid($request->getPost())) {
            $valores = $form->getValues();
            $dados = NULL;
            try {
                $auth = Application_Model_Usuario::verificaSenha($valores['senha'], $sal, $senhaSalgada);

                if($auth == false) {
                    //throw new Exception('Senha inválida!');
                    $this->view->dados = 'Senha inválida!';
                    $this->view->form = $form;
                    return;
                }

                if(($valores['nova_senha'] == '') && ($valores['confirma_senha'] == '')) {
                    $usuario->setNome($valores['nome']);
                    $usuarioMapper->save($usuario);
                    $this->view->dados = 'Dados alterados com sucesso!';
                    $this->view->form = $form;
                    return;
                } else {
                    if($valores['nova_senha'] != $valores['confirma_senha']) {
                        //throw new Exception('Confirmação não confere!<br>Digite novamente!');
                        $this->view->dados = 'Confirmação não confere!<br>Digite novamente!';
                        $this->view->form = $form;
                        return;
                    }
                    $usuario->calculaSenha($valores['nova_senha']);
                    $usuario->setNome($valores['nome']);
                    $usuarioMapper->save($usuario);

                }



                $dados = 'Dados alterados com sucesso!';
            } catch (Exception $ex) {
                $this->view->dados = $ex->getMessage();
            }


            $this->view->dados = $dados;
            $this->view->form = $form;

            //return $this->_helper->redirector('..');
        }
        else {
            $this->view->form = $form;
        }
    }

    public function rankingAction()
    {
        $request = $this->getRequest();
        $inicio = $this->getRequest()->getParam('inicio', 0);
        $quantidade = $this->getRequest()->getParam('quantidade', 30);

        
        $this->view->total = $this->_participantes->getTotalUsuarios();

        $this->view->inicio = $inicio;
        $this->view->quantidade = $quantidade;
        $this->view->ranking = $this->_participantes->ranking($inicio, $quantidade);
    }

}